1. Field of Invention
The present application relates to software applications and their environments and more specifically creating and managing optimized virtual environments for software applications.
2. Related Art
Currently, applications require specific environments in which to execute. For example, applications are usually constructed with a specific operating system environment in mind, and migrating to a different operating system environment requires a different version of the application. In addition to operating system environments, there are also specific hardware requirements associated with applications. At the base level, an application compiled for use on a specific instruction set architecture (ISA) will be unable to execute on a machine with a different ISA.
Commonly used routines are frequently encapsulated in libraries configured to be accessed by applications. These libraries are generally shared among many different applications, allowing the software developer to leverage common functionality and reduce the application's file size. This approach is advantageous when a number of different applications make use of the same commonly used routines. The libraries that an application uses, but are not included with the distribution of the application, need to be present in the application's executing environment to execute the application as intended.
It is common practice to provide a wide variety of libraries and/or individual helper routines in an operating environment in order to support a wide variety of applications. Together these supporting elements comprise a general runtime environment that provides software services for processes or programs while a computer is running. The general runtime environment may further include an operating system, an associated kernel, and software that runs beneath the operating system, such as hardware and/or device drivers.
A general runtime environment may include many components that are not required by those applications that are actually executed. This may be a disadvantage in circumstances that include limits on available memory or other resources consumed by the unused components, or when the extra components conflict with each other.
In some instances, a general runtime environment is contained within a virtual machine environment. A virtual machine environment is an environment that appears from the point of view of a software application within the virtual machine environment to be an independent hardware platform. However, more than one virtual machine environment may be placed on a single hardware platform. Each virtual machine environment may have different characteristics. This allows the single hardware platform to support multiple applications or multiple copies of the same application each within their own isolated virtual machine environment.
In the prior art, a virtual machine environment is typically characterized by a virtual machine specification and a configuration file. For example, VMware, Inc. of Palo Alto, Calif. supplies virtual machine products that are defined in a Virtual Machine Disk Format (VMDK) file and a separate VMX file. The VMDK file is a hard drive specification, complete with a file system and file contents. The VMX file is a configuration file that defines attributes of the virtual machine, such as the amount of memory (RAM), type of processor, type of hardware devices, etc. These products may be used to run several virtual machine environments on a single hardware platform. Typically, the VMDK includes a disk image of an application, support files, and an associated operating system. The VMDK is a virtual hard disk specification that contains a portable image that can be placed in a virtual machine container. The configuration file, or the VMX file, includes the specification of the virtual machine container in which this disk image is placed. For example, the configuration file may include an amount of memory and I/O resources to be included in the container. The virtual machine container determines the virtual machine environment experienced by the disk image.
Generation of the VMDK file is typically a multi-step process in which an operating system is first installed on a clean “hard disk,” support files such as drivers and libraries are installed, and then an application is installed on the “hard disk,” in a step-by-step process. A snapshot of the “hard disk” may be taken between each step, each snapshot resulting in a disk image, and the appropriate machine state. For example, a virtual machine can be snapshot after booting the operating system, such that when reverting to that snapshot the machine will have already been booted. After installation of the application, the image of the disk is contained within a VMDK file and installed in one or more virtual machine container(s). Each VMDK file includes a full operating system and set of support files, just as in a general runtime environment that is not disposed within a virtual machine. Virtual machine environments can therefore have many of the same disadvantages as general runtime environments.